package com.xyhuo.leetcode.november;

import java.util.HashSet;
import java.util.Set;

/**
 * 无限集中的最小数字
 * https://leetcode.cn/problems/smallest-number-in-infinite-set/
 *
 * @time 2023/11/29
 */
public class SmallestInfiniteSet {

    private int index = 1;

    private Set<Integer> removeSet;

    public SmallestInfiniteSet() {
        this.removeSet = new HashSet<>();
    }

    public int popSmallest() {
        while (true) {
            if (!removeSet.contains(index)) {
                break;
            }
            index++;
        }
        removeSet.add(index);
        return index++;
    }

    public void addBack(int num) {
        if (removeSet.contains(num)) {
            removeSet.remove(num);
        }
        if (num < index) {
            index = num;
        }
    }

//    public static void main(String[] args) {
//        SmallestInfiniteSet smallestInfiniteSet = new SmallestInfiniteSet();
//        smallestInfiniteSet.addBack(2);
//        int i = smallestInfiniteSet.popSmallest();
//        int i1 = smallestInfiniteSet.popSmallest();
//        int i2 = smallestInfiniteSet.popSmallest();
//        smallestInfiniteSet.addBack(1);
//        int i3 = smallestInfiniteSet.popSmallest();
//        int i4 = smallestInfiniteSet.popSmallest();
//        int i5 = smallestInfiniteSet.popSmallest();
//    }
}
